#include <iostream>

/**
 * C++ 存储类
 *
 * 存储类定义C++程序中变量/函数的范围（可见性）和生命周期，这些说明符放置在他们所修饰的类型之前，下面
 * 列出C++程序中
 *
 * auto             :
 * register         :
 * static           :
 * extern           :
 * nutable          :
 * thread_local     :
 */

//全局变量，具有外部链接，默认存储类位extern
int globalVar;

void function(){
    //局部变量，具有自动存储期，默认存储类位auto
    auto int localVar = 10;

    //静态变量，具有静态存储期，声明周期贯穿整个程序
    static int staticVar = 20;

    //const变量默认是具有static存储期
    const int constVar = 30;

    class MyClass{
    public:
        mutable int mutableVar;

        void constMemberFunc() const{
            mutableVar = 50;  //允许修改mutable成员变量
        }
    };

    //线程局部变量，每个线程有自己的独立副本
    thread_local int threadVar = 60;
}

int main() {
    //声明具有外部链接的变量
    extern int externalVar; //声明具有外部链接的变量

    function();
    std::cout << "Hello, World!" << std::endl;
    return 0;
}
